%matplotlib inline
from functools import cache
import numpy as np
import matplotlib.pyplot as plt
import itertools
import math
from decimal import Decimal, getcontext
from lib import make_pqzo
from collections import deque
def plot(p, q, z, o, k_max):
fig, ax = plt.subplots()
x_axis = []
y_axis_q = []
y_axis_o = []
for k in range(k_max):
x_axis.append(k)
if k:
y_axis_o.append(max(abs(o(i, k) - p(i, k)) for i in range(1, 4)))
else:
y_axis_o.append(0)
y_axis_q.append(max(abs(q(i, k) - p(i, k)) for i in range(1, 4)))
ax.plot(x_axis, y_axis_q, label='q-p')
ax.plot(x_axis, y_axis_o, label='o-p')
ax.legend()
fig.show(warn=False)
def plot_rolling_n(p, q, z, o, k_max, n):
fig, ax = plt.subplots()
x_axis = []
y_axis_q = []
y_axis_o = []
last_n_q = deque()
last_n_o = deque()
for k in range(k_max):
x_axis.append(k)
if k:
last_n_o.append(max(abs(o(i, k) - p(i, k)) for i in range(1, 4)))
else:
last_n_o.append(0)
last_n_q.append(max(abs(q(i, k) - p(i, k)) for i in range(1, 4)))
if len(last_n_o) > n:
last_n_o.popleft()
last_n_q.popleft()
y_axis_q.append(min(last_n_q))
y_axis_o.append(min(last_n_o))
ax.plot(x_axis, y_axis_q, label='q-p')
ax.plot(x_axis, y_axis_o, label='o-p')
ax.legend()
fig.show(warn=False)
getcontext().prec = 2000
for i in range(1, 32, 2):
a = Decimal(i) / Decimal(100)
plot(*make_pqzo(a, 1 - 2*a, a), 100)
getcontext().prec = 2000
for i in range(1, 32, 2):
a = Decimal(i) / Decimal(100)
plot_rolling_n(*make_pqzo(a, 1 - 2*a, a), 100, 2)
getcontext().prec = 2000
for i in range(1, 32, 2):
a = Decimal(i) / Decimal(100)
plot_rolling_n(*make_pqzo(a, 1 - 2*a, a), 100, 3)
getcontext().prec = 2000
for i in range(1, 32, 2):
a = Decimal(i) / Decimal(100)
plot_rolling_n(*make_pqzo(a, 1 - 2*a, a), 100, 4)
getcontext().prec = 2000
for i in range(1, 32, 2):
a = Decimal(i) / Decimal(100)
plot_rolling_n(*make_pqzo(a, 1 - 2*a, a), 100, 5)
getcontext().prec = 2000
for i in range(1, 32, 2):
a = Decimal(i) / Decimal(100)
plot_rolling_n(*make_pqzo(a, 1 - 2*a, a), 100, 7)
getcontext().prec = 2000
for i in range(1, 32, 2):
a = Decimal(i) / Decimal(100)
plot_rolling_n(*make_pqzo(a, 1 - 2*a, a), 100, 10)
getcontext().prec = 2000
for i in range(1, 32, 2):
a = Decimal(i) / Decimal(100)
plot_rolling_n(*make_pqzo(a, 1 - 2*a, a), 2000, 10)
getcontext().prec = 2000
for i in range(1, 32, 2):
a = Decimal(i) / Decimal(100)
plot(*make_pqzo(a, 1 - 2*a, a), 2000)